Search code examples
alasql

AlaSQL can you use DISTINCT with SEARCH


Say I have an array that looks like this:

var data = [{
  "categories": [{
    "categoryName": "‌belt‌",
    "categoryValue": "‌white‌"
  }, {"categoryName": "‌level‌", "categoryValue": "‌Beginner‌"}, {
    "categoryName": "‌type‌",
    "categoryValue": "‌technique‌"
  }], "id": 1, "skillName": "‌Beginner 1‌", "skips": 0, "weight": 1
}, {
  "categories": [{"categoryName": "‌belt‌", "categoryValue": "‌white‌"}, {
    "categoryName": "‌level‌",
    "categoryValue": "‌Beginner‌"
  }, {"categoryName": "‌type‌", "categoryValue": "‌technique‌"}],
  "id": 2,
  "skillName": "‌Beginner 2‌",
  "skips": 0,
  "weight": 1
}, {
  "categories": [{"categoryName": "‌belt‌", "categoryValue": "‌white‌"}, {
    "categoryName": "‌level‌",
    "categoryValue": "‌Beginner‌"
  }, {"categoryName": "‌type‌", "categoryValue": "‌technique‌"}],
  "id": 3,
  "skillName": "‌Beginner 3‌",
  "skips": 0,
  "weight": 1
}, {
  "categories": [{"categoryName": "‌belt‌", "categoryValue": "‌white‌"}, {
    "categoryName": "‌level‌",
    "categoryValue": "‌Beginner‌"
  }, {"categoryName": "‌type‌", "categoryValue": "‌technique‌"}],
  "id": 4,
  "skillName": "‌Beginner 4‌",
  "skips": 0,
  "weight": 1
}, {
  "categories": [{"categoryName": "‌belt‌", "categoryValue": "‌white‌"}, {
    "categoryName": "‌level‌",
    "categoryValue": "‌Beginner‌"
  }, {"categoryName": "‌type‌", "categoryValue": "‌technique‌"}],
  "id": 5,
  "skillName": "‌Beginner 5‌",
  "skips": 0,
  "weight": 1
},
...
{
  "categories": [{"categoryName": "‌belt‌", "categoryValue": "‌orange‌"}, {
    "categoryName": "‌level‌",
    "categoryValue": "‌Intermediate‌"
  }, {"categoryName": "‌type‌", "categoryValue": "‌technique‌"}],
  "id": 13,
  "skillName": "‌Intermediate 3‌",
  "skips": 0,
  "weight": 1
}, {
  "categories": [{"categoryName": "‌belt‌", "categoryValue": "‌orange‌"}, {
    "categoryName": "‌level‌",
    "categoryValue": "‌Intermediate‌"
  }, {"categoryName": "‌type‌", "categoryValue": "‌technique‌"}],
  "id": 14,
  "skillName": "‌Intermediate 4‌",
  "skips": 0,
  "weight": 1
}, {
  "categories": [{"categoryName": "‌belt‌", "categoryValue": "‌orange‌"}, {
    "categoryName": "‌level‌",
    "categoryValue": "‌Intermediate‌"
  }, {"categoryName": "‌type‌", "categoryValue": "‌technique‌"}],
  "id": 15,
  "skillName": "‌Intermediate 5‌",
  "skips": 0,
  "weight": 1
}, {
  "categories": [{"categoryName": "‌belt‌", "categoryValue": "‌purple‌"}, {
    "categoryName": "‌level‌",
    "categoryValue": "‌Intermediate‌"
  }, {"categoryName": "‌type‌", "categoryValue": "‌technique‌"}],
  "id": 16,
  "skillName": "‌Intermediate 6‌",
  "skips": 0,
  "weight": 1
}
...
]

Let's say that we want to query this, something like:

alasql('SEARCH /categories/categoryValue WHERE(categoryName="belt") FROM ?', [data]);

This is probably going to give you something like:

['white', 'white', 'white',...'orange', 'orange',...'purple'...]

What I'd like is:

['white', 'orange', 'purple']

Is there any way to do this on the query side, or do I need to just filter it for unique values after it returns?


Solution

  • According to this test and this test (line 85), the syntax should be:

    alasql('SEARCH DISTINCT(/categories/ WHERE (categoryName="belt") categoryValue) FROM ?', [data]);